package practice;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * 练习第九天
 */
public class Day9 {

    /**
     * 删除相邻数字的最大分数（动规）
     * 输入：
     * 9
     * 1 2 1 3 2 2 2 2 3
     * 输出：
     * 10
     * 说明：
     * 第一步选择一个 2 ，然后所有 1 和 3 都被移除了，此时数组中剩下的是 [2,2,2,2] ，依次选择他们即可得到 10 分
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int N = (int)1e4 + 10;
        int[] hash = new int[10010];
        //表示选到i位置时，未选当前位置所获得的最大分数
        int[] f = new int[10010];
        //表示选到i位置，选取当前位置所获得的最大分数
        int[] g = new int[10010];
        for(int i = 0; i < n; i++) {
            int x = in.nextInt();
            hash[x] += x;
        }
        for(int i = 1; i < 10010; i++) {
            g[i] = hash[i] + f[i-1];
            f[i] =  Math.max(f[i-1],g[i-1]);
        }
        System.out.println(Math.max(g[10010-1],f[10010-1]));
    }

    /**
     * 组队竞赛 (贪心)
     * 输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)
     * 第二行包括3*n个整数a_i(1 ≤ a_i ≤ 10^9),表示每个参赛选手的水平值.
     * 输出一个整数表示所有队伍的水平值总和最大值.
     */
    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int[] nums = new int[n*3];
        for(int i = 0; i < n * 3; i++) {
            nums[i] = in.nextInt();
        }
        Arrays.sort(nums);
        long ret = 0;
        int pos = n * 3 - 2;
        int count = 0;
        while(count != n) {
            ret += nums[pos];
            pos -= 2;
            count++;
        }
        System.out.println(ret);
    }

    /**
     * 乒乓球筐
     */
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            char[] s1 = in.next().toCharArray();
            char[] s2 = in.next().toCharArray();
            Map<Character,Integer> map1 = new HashMap<Character, Integer>();
            Map<Character,Integer> map2 = new HashMap<Character, Integer>();
            for(int i = 0; i < s1.length; i++) {
                char ch = s1[i];
                map1.put(ch,map1.getOrDefault(ch,0) + 1);
            }
            boolean ret = true;
            for(int i = 0; i < s2.length; i++) {
                char ch = s2[i];
                map2.put(ch,map2.getOrDefault(ch,0) + 1);
                if(map2.getOrDefault(ch,0) > map1.getOrDefault(ch,0)) {
                    ret = false;
                    break;
                }
            }
            System.out.println(ret ? "Yes" : "No");
        }
    }
}
